iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
AI/ ML & Data

From Python Beginner To AI Engineer系列 第 29

如何把檔案內容讀取出來?

  • 分享至 

  • xImage
  •  

Colab 檔案系統

透過程式碼來進行檔案讀取的操作,是相當重要的一項技能。在 Python 裡面,可以使用 open() 函式來開啟檔案。在此之前,我們需要先上傳一個範例檔案到 Colab 裡面:

Colab File Explorer

點開之後稍等一下,就會跑出一個檔案總管,在 Colab 裡面已經預先放了一點檔案。各位可以先下載這個檔案,然後將他上傳到 Colab 裡面:

Colab Upload File

基本讀檔

開啟檔案的語法如下:

fp = open("zh-wikipedia-math.txt")

需要注意,在左邊的檔案總管與程式碼裡面的檔案名稱需要一致:

Colab Open File

開啟檔案的模式主要分成讀取 (Read) 與寫入 (Write),預設的模式已經是讀取,但如果想要更加強調這點,可以加上第二個參數 "r" 來表示:

fp = open("zh-wikipedia-math.txt", "r")

一般來說,多數的檔案都是使用 UTF-8 編碼,在 Colab 裡面沒有特別指定編碼種類通常不會有問題,但是在 Windows 作業系統裡面就不是這麼一回事了,因此建議再加上一個 encoding 參數:

fp = open("zh-wikipedia-math.txt", "r", encoding="UTF-8")

要將檔案內容讀取進來,可以使用 .read() 方法:

>>> print(fp.read())
數學是研究數量、結構以及空間等概念及其變化的一門學科,屬於形式科學的一種。
數學利用抽象化和邏輯推理,從計數、計算、量度、對物體形狀及運動的觀察發展而成。
... (略)

.read() 會將檔案內容全部讀取進來,以一個字串來呈現。如果將以上程式碼重複執行第二次,會發現輸出不了任何東西!這是因為在檔案讀取的情況下,同樣的內容只會被讀取一次,使用 .read() 會一口氣讀到檔案結尾,因此再執行一次 .read() 就讀取不到任何東西了。如果想要再讀取一次,可以選擇再 open() 一次,也可以選擇對 fp 使用 .seek() 方法:

>>> fp.seek(0)
>>> print(fp.read())
數學是 ... (略)

fp.seek(0) 會將檔案的讀取位置重新放到檔案最開頭的位置,也就是第 0 個字前面,這樣就能再次讀取檔案的內容了。

完成檔案讀取後,需要使用 .close() 方法,關閉這個檔案的讀取:

fp = open("zh-wikipedia-math.txt")
fp.read()
fp.close()

with 語法

每次讀取檔案都要呼叫 .close() 可能有點麻煩,這時可以使用 Python 的 with .. as ... 的語法:

with open("zh-wikipedia-math.txt") as fp:
    print(fp.read())

使用 with 語法語法,會讓 fp 在脫離程式碼區塊後,自動呼叫 .close() 方法來關閉檔案,這也是 Python 推薦的讀寫檔語法。

逐行讀取

如果不想要一次把所有檔案內容讀取進來,可以使用 for 迴圈來逐行讀取:

>>> with open("zh-wikipedia-math.txt") as fp:
>>>     for line in fp:
>>>         print(repr(line))
'數學是研究數量、結構以及空間等概念及其變化的一門學科,屬於形式科學的一種。\n'
'數學利用抽象化和邏輯推理,從計數、計算、量度、對物體形狀及運動的觀察發展而成。\n'
'數學家們拓展這些概念,以公式化新的猜想,以及從選定的公理及定義出發,嚴謹地推導出一些定理。\n'
'\n'

for 迴圈直接對 fp 迭代,就可以逐行讀取檔案的內容。這裡用到 repr() 函式,是用來顯示該變數的原始內容,透過 repr() 可以發現,每行文字的最後面都出現了 \n 的符號,這是什麼呢?反斜線 \ 用在字串裡面是跳脫字元的用法,也就是說這個反斜線與他後面的一個字元並不會被顯示出來,而是用作某種特殊用途的,而 \n 是用來表示換行的意思。

如果直接將結尾帶有換行符號的字串放在 print() 裡面,那就會輸出兩個換行符號,因此多數情況下都會希望把這個換行符號消掉,可以使用 .strip() 方法,假設要把每行字串反過來輸出,可以這樣寫:

>>> with open("zh-wikipedia-math.txt") as fp:
>>>     for line in fp:
>>>         print(line.strip()[::-1])
。種一的學科式形於屬,科學門一的化變其及念概等間空及以構結、量數究研是學數
。成而展發察觀的動運及狀形體物對、度量、算計、數計從,理推輯邏和化象抽用利學數
。理定些一出導推地謹嚴,發出義定及理公的定選從及以,想猜的新化式公以,念概些這展拓們家學數
... (略)

以上就是基本的檔案讀取方法!


上一篇
使用集合計算字串相似度
下一篇
如何把執行結果寫進檔案?
系列文
From Python Beginner To AI Engineer31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言